package cn.kent.listener;

import cn.kent.context.MySessionContext;

import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

/**
 * 监听session的创建和销毁
 * 创建的时候把session信息存储到上下文中，session销毁时，自定义session上下文中也删掉该session
 */
@WebListener
public class SessionListener implements HttpSessionListener {

    // 获取自定义上下文实例
    public MySessionContext msc = MySessionContext.getInstance();

    /**
     * session创建事件
     */
    @Override
    public void sessionCreated(HttpSessionEvent se) {
        System.out.println("Session创建");
        HttpSession session = se.getSession();
        msc.addSession(session); // 添加当前session到自定义session上下文
    }

    /**
     * session销毁事件
     */
    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        System.out.println("Session销毁");
        HttpSession session = se.getSession();
        // 要从db或redis缓存中把指定sessionId的用户session信息删除
        msc.delSession(session); // 从自定义上下文中删除该session
    }
}
